package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.entity.ShippingAddress;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 收货地址数据访问层
 */
@Mapper
public interface ShippingAddressMapper {

    /**
     * 插入收货地址
     *
     * @param shippingAddress 收货地址
     * @return 影响行数
     */
    int insert(ShippingAddress shippingAddress);

    /**
     * 根据ID查询收货地址
     *
     * @param id 地址ID
     * @return 收货地址
     */
    ShippingAddress selectById(Long id);

    /**
     * 查询用户的收货地址列表
     *
     * @param userId 用户ID
     * @return 收货地址列表
     */
    List<ShippingAddress> selectByUserId(Long userId);

    /**
     * 查询用户的默认收货地址
     *
     * @param userId 用户ID
     * @return 默认收货地址
     */
    ShippingAddress selectDefaultAddress(Long userId);

    /**
     * 更新收货地址
     *
     * @param shippingAddress 收货地址
     * @return 影响行数
     */
    int update(ShippingAddress shippingAddress);

    /**
     * 删除收货地址
     *
     * @param id     地址ID
     * @param userId 用户ID（验证权限）
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 将用户的所有收货地址设为非默认
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    int resetDefaultAddress(Long userId);

    /**
     * 设置默认收货地址
     *
     * @param id     地址ID
     * @param userId 用户ID
     * @return 影响行数
     */
    int setDefaultAddress(@Param("id") Long id, @Param("userId") Long userId);
}
